#include <iostream>
#include <cstring>
using namespace std;
const int MAXN=80;
int n,m;
int a[MAXN+1][MAXN+1];

struct HNUM{
    int ele[100];
    int len;
    void init()
    {
        memset(ele,0,sizeof(ele));
        len=0;
    }
    void read_from(int x){
        init();
        while(x>0){
            ele[len++]=x%10;
            x=x/10;
        }
    }
    void add(HNUM other){//加上另一个单精度数
        int l=max(len,other.len);
        int c=0;
        for(int i=0;i<l;i++){
            int t=ele[i]+other.ele[i]+c;
            ele[i]=t%10;
            c=t/10;
        }
        len=l;
        if (c>0) ele[len++]=c;
    }

    void mul(int x){ //剩以某个整数
        int c=0;
        for(int i=0;i<len;i++){
            int t=ele[i]*x+c;
            ele[i]=t%10;
            c=t/10;
        }
        while(c>0){
            ele[len++]=c%10;
            c=c/10;
        }
    }
    bool operator <(const HNUM other)const {//比较大小
        if (len<other.len) return true;
        if (len>other.len) return false;
        for(int i=len-1;i>=0;i--){
            if (ele[i]<other.ele[i]) return true;
            else if (ele[i]>other.ele[i]) return false;
        }    
        return false;
    }
    void output(){
        if (len==0) cout<<0; //注意0的输出
        else {
            for(int i=len-1;i>=0;i--) cout<<ele[i];
        }
    }
};

HNUM maxs[MAXN+1][MAXN+1][MAXN+1];
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++) cin>>a[i][j];
    //动规初始化，将长度为1的区间即[j,j]先计算出来
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++) {
            maxs[i][j][j].read_from(a[i][j]);
            maxs[i][j][j].mul(2);
        }
    //开始动规，从长度为2到m
    for(int k=2;k<=m;k++)
        for (int i=1;i<=n;i++)
            for(int l=1;l<=m-k+1;l++){
                int r=l+k-1;
                HNUM t1,t2;
                //t1=2*(a[i][l]+maxs[i][l+1][r])
                t1.read_from(a[i][l]);  
                t1.add(maxs[i][l+1][r]);
                t1.mul(2);
                //t2=2*(maxs[i][l][r-1]+a[i][r])
                t2.read_from(a[i][r]);
                t2.add(maxs[i][l][r-1]);
                t2.mul(2);           
                if (t1<t2) maxs[i][l][r]=t2;
                else maxs[i][l][r]=t1;
            }
    HNUM ans;
    ans.init();
    for(int i=1;i<=n;i++) ans.add(maxs[i][1][m]);
    ans.output();
}